From 76b2f97602b70b48396b026cdc02234d9f83dc06 Mon Sep 17 00:00:00 2001 From: Guillaume Maudoux Date: Thu, 13 Jun 2019 21:11:56 +0000 Subject: [PATCH] PrintUnixDialog: Slightly ease page range entry Page ranges entry can now be focused directly, and will automatically select the page ranges button when doing so. This avoids the sometimes counter-intuitive previous behavior where the entry was automatically focused when toggling the radio button, but the user may still find themselves clicking uselessly in the text entry because they scheduled it in their mental model. --- gtk/gtkprintunixdialog.c | 19 +++++++++++++++++-- gtk/ui/gtkprintunixdialog.ui | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/gtk/gtkprintunixdialog.c b/gtk/gtkprintunixdialog.c index c1917999eb..d2d516c569 100644 --- a/gtk/gtkprintunixdialog.c +++ b/gtk/gtkprintunixdialog.c @@ -157,6 +157,9 @@ static void emit_ok_response (GtkTreeView *tree_vie GtkTreePath *path, GtkTreeViewColumn *column, gpointer *user_data); +static gboolean page_range_entry_focus_changed (GtkWidget *entry, + GParamSpec *pspec, + GtkPrintUnixDialog *dialog); static void update_page_range_entry_sensitivity(GtkWidget *button, GtkPrintUnixDialog *dialog); static void update_print_at_entry_sensitivity (GtkWidget *button, @@ -562,6 +565,7 @@ gtk_print_unix_dialog_class_init (GtkPrintUnixDialogClass *class) gtk_widget_class_bind_template_callback (widget_class, error_dialogs); gtk_widget_class_bind_template_callback (widget_class, emit_ok_response); gtk_widget_class_bind_template_callback (widget_class, selected_printer_changed); + gtk_widget_class_bind_template_callback (widget_class, page_range_entry_focus_changed); gtk_widget_class_bind_template_callback (widget_class, update_page_range_entry_sensitivity); gtk_widget_class_bind_template_callback (widget_class, update_print_at_entry_sensitivity); gtk_widget_class_bind_template_callback (widget_class, update_print_at_option); @@ -2308,6 +2312,19 @@ draw_collate (GtkDrawingArea *da, } } +static gboolean +page_range_entry_focus_changed (GtkWidget *entry, + GParamSpec *pspec, + GtkPrintUnixDialog *dialog) +{ + GtkPrintUnixDialogPrivate *priv = gtk_print_unix_dialog_get_instance_private (dialog); + + if (gtk_widget_has_focus (entry)) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->page_range_radio), TRUE); + + return FALSE; +} + static void update_page_range_entry_sensitivity (GtkWidget *button, GtkPrintUnixDialog *dialog) @@ -2317,8 +2334,6 @@ update_page_range_entry_sensitivity (GtkWidget *button, active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); - gtk_widget_set_sensitive (priv->page_range_entry, active); - if (active) gtk_widget_grab_focus (priv->page_range_entry); } diff --git a/gtk/ui/gtkprintunixdialog.ui b/gtk/ui/gtkprintunixdialog.ui index bacfd31e07..ef905ecdbf 100644 --- a/gtk/ui/gtkprintunixdialog.ui +++ b/gtk/ui/gtkprintunixdialog.ui @@ -225,11 +225,11 @@ - 0 1 Specify one or more page ranges, e.g. 1–3, 7, 11 1 + Pages -- 2.30.2